package CtrLayer;

import java.util.ArrayList;

import DataLayer.DB.DBDelOrdre;
import DataLayer.DB.DBOrdre;
import DataLayer.Model.DelOrdre;
import DataLayer.Model.Kunde;
import DataLayer.Model.Ordre;
import DataLayer.Model.Ordre.OrdreStatus;
import Email.Email;

/**
 * OrdreCtr keeps control of the orders made in both PaintingCtr and ButikCtr.
 * 
 * @author Gruppe 4 - Dennis Biil, Brian Smed, Kristian Henriksen og Anders Engbo
 * @version 1.0
 */
public class OrdreCtr implements IFOrdreCtr
{
	public OrdreCtr()
	{
	}

	@Override
	public ArrayList<Ordre> getAllOrdre()
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getAllOrdre();
	}

	public ArrayList<Ordre> getAllOrdreInfo()
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getAllOrdreInfo();
	}

	@Override
	public ArrayList<Ordre> getAllOrdreViaKundeNavn(String navn)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getAllOrdreViaKundeNavn(navn);
	}

	@Override
	public ArrayList<Ordre> getAllOrdreViaKundeEmail(String email)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getAllOrdreViaKundeEmail(email);
	}

	@Override
	public ArrayList<Ordre> getAllOrdreViaStatus(String status)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getAllOrdreViaStatus(status);
	}

	@Override
	public ArrayList<Ordre> getAllOrdreViaoprettelsesDato(String oprettelsesDato)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getAllOrdreViaoprettelsesDato(oprettelsesDato);
	}

	@Override
	public Kunde getKunde(int kundeId)
	{
		KundeCtr kCtr = new KundeCtr();
		return kCtr.getKunde(kundeId);
	}

	@Override
	public Ordre getOrdre(int ordreId)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getOrdre(ordreId);
	}

	public Ordre getOrdreInfo(int ordreId)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getOrdreInfo(ordreId);
	}

	@Override
	public int createOrdre(Ordre o)
			throws Exception
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.insertOrdre(o);
	}

	@Override
	public int updateOrdre(Ordre o)
	{
		if (o.getOrdreStatus() == OrdreStatus.ENDED)
		{
			if (o.getTotal() != o.getDebit())// can't set status to Ended without the Total equaling
												// the Debit
			{
				throw new NumberFormatException("Cannot end an order when debit isnt payed.");
			}
		}
		DBOrdre oDB = new DBOrdre();
		return oDB.updateOrdre(o);
	}

	@Override
	public int removeOrdre(int ordreId)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.deleteOrdre(oDB.getOrdre(ordreId));
	}

	@Override
	public ArrayList<DelOrdre> getAllDelOrdrer(int ordreId)
	{
		DBOrdre oDB = new DBOrdre();
		return oDB.getOrdre(ordreId).getDelOrdre();
	}

	@Override
	public DelOrdre getDelOrdre(int delOrdreId)
	{
		DBDelOrdre doDB = new DBDelOrdre();
		return doDB.getDelOrdre(delOrdreId);
	}
}
